<?php
/***************************************************************************
 * 
 * Copyright (c) 2010 , Inc. All Rights Reserved
 * $Id$ 
 * 
 **************************************************************************/
 
 
 
/**
 * @file ValidationStringTest.php
 * @author niulei(niulei@)
 * @date 2010/05/17 18:58:28
 * @version $Revision$ 
 * @brief 
 *  
 **/
require_once 'PHPUnit/Framework/TestCase.php';
require_once 'validate/Validation.php';

class ValidationStringTest extends PHPUnit_Framework_TestCase{

    protected function setUp()
    {			
       sleep(1);
    }
    
    public function testNoneChecked(){
    	$arr_rules = array(
    	                    'func' => 'STRING',
    	                    'flag' => array(
                                            'FLAG_ALLOW_HIGH',
                                           ),
                            //'min_range'=>1,//最小长度
                            //'max_range'=>100,//最大长度
                            //'value_array'=>array('test1','test2','test3'),//可选值
                            //'encode'=>'gbk'|'utf-8',//可选编码，不设置按gbk处理
                            //'reg_exp'=>[可输入一个PHP支持的正则表达式],
                            //'length_array'=>array(2,3,5),//可选长度值
                            //'byte_length'=>true|false,//是否按字节长度处理，不设置不采用字节长度处理
    	                   );
        $input = "中华人民共和国sssssss";
        $this->assertTrue(Validation::check($input,$arr_rules));
    }
    
    public function testEmptyChecked(){
    	$input = "";
    	$arr_rules = array(
    	                    'func' => 'STRING',
    	                    'flag' => array(
                                            'FLAG_CASE_IGNORE',
                                            'FLAG_ALLOW_HIGH',
                                           ),
                            'min_range'=>1,//最小长度
                            'max_range'=>100,//最大长度
    	                   );
        
        $this->assertContains("Empty checked", Validation::check($input,$arr_rules));
        $arr_rules['min_range'] = 0;
        $this->assertTrue(Validation::check($input,$arr_rules));
    }
    
    public function testLengthChecked(){
    	$input = "中华人民共和国sssssss";
    	$arr_rules = array(
    	                    'func' => 'STRING',
    	                    'flag' => array(
    	                                    'FLAG_ALLOW_EMPTY',
                                            'FLAG_CASE_IGNORE',
                                            'FLAG_ALLOW_HIGH',
                                           ),
                            'min_range'=>1,//最小长度
                            'max_range'=>13,//最大长度
    	                   );
        
        $this->assertContains("Length checked", Validation::check($input,$arr_rules));
        $arr_rules['max_range'] = 14;
        $this->assertTrue(Validation::check($input,$arr_rules));

        $arr_rules['byte_length'] = true;
        $this->assertContains("Length checked", Validation::check($input,$arr_rules));
 
        unset($arr_rules['byte_length']);
        $arr_rules['length_array'] = array(10,11,12);
        $this->assertContains("Length checked", Validation::check($input,$arr_rules));
        
        $arr_rules['length_array'] = array(10,11,12,13,14);
        $this->assertTrue(Validation::check($input,$arr_rules));
    }
    
    public function testValueChecked(){
    	$input = "中华人民共和国sssssss";
    	$arr_rules = array(
    	                    'func' => 'STRING',
    	                    'flag' => array(
    	                                    'FLAG_ALLOW_EMPTY',
                                            'FLAG_CASE_IGNORE',
                                            'FLAG_ALLOW_HIGH',
                                           ),
                            'min_range'=>1,//最小长度
                            'max_range'=>100,//最大长度
                            'value_array'=>array('test1','test2','test3'),//可选值
    	                   );
        
        $this->assertContains("Value checked", Validation::check($input,$arr_rules));
        $arr_rules['value_array'] = array('test1','test2','test3','中华人民共和国sssssss');
        $this->assertTrue(Validation::check($input,$arr_rules));
    }
    
   public function testEncodeChecked(){
    	$input = "中华人民共和国sssssss";
    	$arr_rules = array(
    	                    'func' => 'STRING',
    	                    'flag' => array(
    	                                    'FLAG_ALLOW_EMPTY',
                                            'FLAG_CASE_IGNORE',
                                            'FLAG_ALLOW_HIGH',
                                           ),
                            'min_range'=>1,//最小长度
                            'max_range'=>100,//最大长度
                            'encode'=>'XXXX',
    	                   );
        
        $this->assertContains("Length checked", Validation::check($input,$arr_rules));
        $arr_rules['encode'] = 'utf-8';
        $this->assertContains("Encode checked", Validation::check($input,$arr_rules));
        $arr_rules['encode'] = 'gbk';
        $this->assertTrue(Validation::check($input,$arr_rules));
    }
    
   public function testRegexpChecked(){
    	$input = "中华人民共和国sssssss";
    	$arr_rules = array(
    	                    'func' => 'STRING',
    	                    'flag' => array(
    	                                    'FLAG_ALLOW_EMPTY',
                                            'FLAG_CASE_IGNORE',
                                            'FLAG_ALLOW_HIGH',
                                           ),
                            'min_range'=>1,//最小长度
                            'max_range'=>100,//最大长度
                            'reg_exp'=>'[\x00-\x19]',
    	                   );
        
        $this->assertContains("Regexp checked", Validation::check($input,$arr_rules));
        $arr_rules['reg_exp'] = '[sssssss$]';
        $this->assertTrue(Validation::check($input,$arr_rules));
    }
    
   public function testContentChecked(){
    	$input = "中华人民共和国sssssss";
    	$arr_rules = array(
    	                    'func' => 'STRING',
    	                    'flag' => array(
    	                                    'FLAG_ALLOW_EMPTY',
                                            'FLAG_CASE_IGNORE',
                                           ),
                            'min_range'=>1,//最小长度
                            'max_range'=>100,//最大长度
    	                   );
        
        $this->assertContains("Content checked", Validation::check($input,$arr_rules));
        $arr_rules['flag'] = array(
    	                              'FLAG_ALLOW_EMPTY',
                                      'FLAG_CASE_IGNORE',
                                      'FLAG_ALLOW_HIGH',
                                    );
        $this->assertTrue(Validation::check($input,$arr_rules));
        
        $input = "中华人民共和国sssssss	";//加上tab
        $this->assertContains("Content checked", Validation::check($input,$arr_rules));
        $arr_rules['flag'] = array(
    	                              'FLAG_ALLOW_EMPTY',
                                      'FLAG_CASE_IGNORE',
                                      'FLAG_ALLOW_HIGH',
                                      'FLAG_ALLOW_LOW',
                                    );
        $this->assertTrue(Validation::check($input,$arr_rules));
    }
    
    public function testStringUnhtml(){
    	$input = "";
    	$arr_rules = array(
    	                    'func' => 'STRING_UNHTML',
    	                    'flag' => array(
    	                                    'FLAG_ALLOW_EMPTY',
                                           ),
                            'min_range'=>1,//最小长度
                            'max_range'=>100,//最大长度
    	                   );
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "中华人民共和国sssssss";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "<a>中华人民共和国sssssss</a>";
        $this->assertContains("Regexp checked", Validation::check($input,$arr_rules));
        $input = "中华人民共和国<a>ssss</a>sss";
        $this->assertContains("Regexp checked", Validation::check($input,$arr_rules));
    }
    
    public function testStringSingle(){
    	$input = "";
    	$arr_rules = array(
    	                    'func' => 'STRING_SINGLE',
    	                    'flag' => array(
    	                                    'FLAG_ALLOW_EMPTY',
                                           ),
                            'min_range'=>1,//最小长度
                            'max_range'=>100,//最大长度
    	                   );
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "中华人民共和国sssssss";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "<a>中华人民共和国sssssss</a>";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "中华人民共和国<a>ssss</a>sss";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "中华人民共和国<a>ssss</a>sss
                  
                   hello";
        $this->assertContains("Content checked", Validation::check($input,$arr_rules));
        $input = "中华人民共和国<a>ssss</a>sss	";
        $this->assertContains("Content checked", Validation::check($input,$arr_rules));
    }
    
    public function testStringMulti(){
    	$input = "";
    	$arr_rules = array(
    	                    'func' => 'STRING_MULTI',
    	                    'flag' => array(
    	                                    'FLAG_ALLOW_EMPTY',
                                           ),
                            'min_range'=>1,//最小长度
                            'max_range'=>100,//最大长度
    	                   );
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "中华人民共和国sssssss";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "<a>中华人民共和国sssssss</a>";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "中华人民共和国<a>ssss</a>sss";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "中华人民共和国<a>ssss</a>sss
                  
                   hello";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "中华人民共和国<a>ssss</a>sss	";
        $this->assertTrue(Validation::check($input,$arr_rules));
    }
    
    public function testName(){
    	$input = "";
    	$arr_rules = array(
    	                    'func' => 'NAME',
    	                    'flag' => array(
    	                                    'FLAG_ALLOW_EMPTY',
                                           ),
                            'min_range'=>1,//最小长度
                            'max_range'=>100,//最大长度
    	                   );
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "中华人民共和国sssssss";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "<a>中华人民共和国sssssss</a>";
        $this->assertContains("Content checked", Validation::check($input,$arr_rules));
        $input = "中华人民共和国<a>ssss</a>sss";
        $this->assertContains("Content checked", Validation::check($input,$arr_rules));
        $input = "中华人民共和国<a>ssss</a>sss
                  
                   hello";
        $this->assertContains("Content checked", Validation::check($input,$arr_rules));
        $input = "中华人民共和国<a>ssss</a>sss	";
        $this->assertContains("Content checked", Validation::check($input,$arr_rules));
        $input = "中华人民共和国ssssss+-=";
        $this->assertContains("Content checked", Validation::check($input,$arr_rules));
    }
    
    public function testTelNo(){
    	$input = "";
    	$arr_rules = array(
    	                    'func' => 'TELNO',
    	                    'flag' => array(
    	                                    'FLAG_ALLOW_EMPTY',
                                           ),
                            'min_range'=>1,//最小长度
                            'max_range'=>15,//最大长度
    	                   );
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "中华人民共和国sssssss";
        $this->assertContains("Regexp checked", Validation::check($input,$arr_rules));
        $input = "0444-44-555-555";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "4444-555555";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "4444555555";
        $this->assertTrue(Validation::check($input,$arr_rules));
        $input = "0444-4555555-44444444";
        $this->assertContains("Length checked", Validation::check($input,$arr_rules));
    }
}
?>
